package kara;



import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class A98P2 {
    static  List<List<Integer>> res;//邻接表
    static  List<Integer> path;
    static int n;//节点
    static int m;//边
    static int[] vis;
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        n= sc.nextInt();
        m=sc.nextInt();
        vis=new int[n+1];
        res=new ArrayList<List<Integer>>();
        path=new ArrayList<Integer>();
        //初始化邻接表
        for(int i=0;i<=n;i++){
            res.add(new ArrayList<>());
        }
        for(int i=1;i<=m;i++){
            int a=sc.nextInt();
            int b=sc.nextInt();
            res.get(a).add(b);
        }
        path.add(1);//添加到路径
        vis[1]=1;//标记
        dfs(1,n, (ArrayList<Integer>) path);//处理当前点后面的点

    }
    //处理下一个节点
    static  void dfs(int cur,int u,ArrayList<Integer> path){//当前节点，目标点

 //如果该节点已经是终点了，那么不用在往后处理了，直接打印然后回溯
        if(cur==u) {
            for (Integer i : path) {
                System.out.print(i + " ");
            }
            System.out.println();
            return;
        }

        List<Integer> list = res.get(cur);
        for (Integer i : list) {
            if(vis[i]==0){
                //当前点没有被搜索
                vis[i]=1;//标记
                path.add(i);
                dfs(i,u,path);
                vis[i]=0;
                path.remove(path.size()-1);
            }
        }
    }
}
